#include "mutex.h"



// 
// 写到这里其实就可以使用Mutex来锁定临界区，但我们发现Mutex只是用来对锁的初始化和销毁，
// 我们还得在代码中调用Lock和Unlock函数，这又是一个对立操作，所以我们可以继续使用RAII进行封装，代码如下：
// 

class MutexLock
{
public:
    explicit MutexLock(Mutex *mu)
        : mu_(mu)
    {
        this->mu_->Lock();
    }
    ~MutexLock() { this->mu_->Unlock(); }

private:
    Mutex *const mu_;
    // No copying allowed
    MutexLock(const MutexLock &) = delete;
    void operator=(const MutexLock &) = delete;
};